import md5 from "./md5";
import {Base64} from "js-base64"

//@yu 2016.12.14 加入配置签名参数
var signConfig = {
    signstr: "kl4w3hbbh7jp5ocu9n",         //设置签名key
};

function _sign(map) {
    var json = null;
    var keys = Object.keys(map);
    var count = keys.length;
    keys.sort();
    var signstr = signConfig.signstr;
    for (var i = 0; i < count; i++) {
        var k = keys[i];
        var v = map[k];
        if (k == "json") {
            json = v;
        } else {
            signstr = signstr + k + v;
        }
    }
    if (json) {
        signstr = signstr + json;
    }
    return md5(signstr);
}

export function suffix(map) {
    var timestamp = Math.round(new Date().getTime());
    map['timestamp'] = timestamp;

    var signStr = _sign(map);
    delete map['json'];
    return {
        ...map,
        sign: signStr,
    };
}


/*--------------------------------------
 api名称：setSignConfig
 api作用：配置签名公有参数
 参数名：strChannel
 参数类型：string
 参数取值范围：["APP","WECHAT","GROUPON"]
 参数默认值："WECHAT"
 参数作用：不同的api渠道
 --------------------------------------*/

//@yu 2016.12.14 加入配置签名参数
export function setSignConfig(strChannel) {

}

/*--------------------------------------
 api名称：setVersion
 api作用：设置签名中的版本号
 参数名：strVer
 参数类型：string
 参数默认值："2.0.1"
 参数作用：版本号
 --------------------------------------*/

//@yu 2016.12.15 加入配置版本号
export function setVersion(strVer) {
    if ((typeof strVer) == 'string') {
        signConfig.v = strVer;
    }
}

/*--------------------------------------
 api名称：getUrlQuery
 api作用：设置签名中的版本号
 参数名：name
 参数类型：string
 参数作用：URL上参数名

 参数名：url
 参数类型：string
 参数作用：URL
 --------------------------------------*/

//@yu 2016.12.15 加入配置版本号
export function getUrlQuery(name, url) {
    if (!url) {
        url = window.location.href;
    }
    name = name.replace(/[\[\]]/g, "\\$&");
    let regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}


/*--------------------------------------
 api名称：b64Encode
 api作用：base64加密字符串
 参数名：str
 参数类型：string
 参数作用：要加密的字符串
 --------------------------------------*/

//@yu 2016.12.15 加入配置版本号
export function b64Encode(str) {
    return Base64.encode(str);
}

/*--------------------------------------
 api名称：b64Decode
 api作用：base64解密字符串
 参数名：str
 参数类型：string
 参数作用：要解密的字符串
 --------------------------------------*/

//@yu 2016.12.15 加入配置版本号
export function b64Decode(str) {
    return Base64.decode(str);
}


/*
 * 对文件进行md5
 * @param file 文件
 * @returns {Promise}
 */
export function md5File(file) {
    return new Promise(function (resolve, reject) {
        let reader = new FileReader()
        //目前使用读二进制串
        reader.readAsBinaryString(file);
        //读arraybuffer
        // reader.readAsArrayBuffer(file)
        reader.onload = function () {
            resolve(md5(this.result));
        }
        reader.onerror = function () {
            resolve();
        }
    })
}




